package fabriques;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import donnees.Categorie;


public class FabCategorie{

	public static FabCategorie fc;

	private static PreparedStatement pcreer;
	private static String creer = "insert into Categorie values(?,?,?)";
	private static PreparedStatement prechercher;
	private static String rechercher = "select * from Categorie where idCategorie=?";
	private static PreparedStatement prechercherCategorieduProduit;
	private static String rechercherCategorieduProduit= "select Categorie.idCategorie from Categorie,Produit where Categorie.idCategorie = Produit.idCategorie and Produit.idProduit=?";
	private static PreparedStatement plister;
	private static String lister = "select * from Categorie";

	public static synchronized FabCategorie getInstance(){
		if(fc == null)
			fc = new FabCategorie();
		return fc;
	}

	public static void setConnection(Connection c){
		try {
			pcreer = c.prepareStatement(creer);
			prechercher = c.prepareStatement(rechercher);
			prechercherCategorieduProduit = c.prepareStatement(rechercherCategorieduProduit);
			plister = c.prepareStatement(lister);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private FabCategorie(){
		Connexion.getInstance();
		Connection con = Connexion.getCon();
		setConnection(con);
	}

	public Categorie creer(int idCateg, String libelle, String description){
		try{
			pcreer.setInt(1,idCateg);
			pcreer.setString(2,libelle);
			pcreer.setString(3,description);
			pcreer.executeUpdate();
		}catch (SQLException e){
			e.printStackTrace();
		}
		return new Categorie(idCateg,libelle,description);
	}

	public Categorie rechercher(int idCateg) throws SQLException{
		ResultSet res = null;
		try {
			prechercher.setInt(1, idCateg);
			res = prechercher.executeQuery();
		}catch (SQLException e) {
			e.printStackTrace();
		}
		res.next();
		return new Categorie(res.getInt(1),res.getString(2),res.getString(3));
	}

	public ArrayList<Categorie> lister(){
		ResultSet res= null;
		try {
			res=plister.executeQuery();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		ArrayList<Categorie> lesCat = new ArrayList<Categorie>();
		try {
			while(res.next()){
				lesCat.add(rechercher(res.getInt(1)));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return lesCat;
	}

	public Categorie rechercherCategorieDuProduit(int idProd){
		ResultSet res = null;
		try {
			prechercherCategorieduProduit.setInt(1, idProd);
			res = prechercherCategorieduProduit.executeQuery();
		}catch (SQLException e) {
			e.printStackTrace();
		}

		try {
			if(res.next())
				return rechercher(res.getInt(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}